#!/bin/bash

# 设置OpenBLAS路径（使用正斜杠）
OPENBLAS_PATH="K:/Dev/iTransformer/OpenBLAS-0.3.30-x64"

# 设置环境变量
export CGO_ENABLED=1
# export CGO_CFLAGS="-I$OPENBLAS_PATH/include"
# export CGO_LDFLAGS="-L$OPENBLAS_PATH/lib -lopenblas"
export PATH="$OPENBLAS_PATH/bin:$PATH"

# 清理旧构建
echo "清理旧构建..."
rm -f iTransformer-dynamic.exe iTransformer-static.exe libopenblas.dll 2>/dev/null

# 动态链接构建
# echo "构建动态链接版本..."
# go build -o iTransformer-dynamic.exe
# echo "动态链接版本大小: $(du -h iTransformer-dynamic.exe | cut -f1)"

# 检查文件是否存在
# if [ -f libopenblas.dll ]; then
#     echo "libopenblas版本大小: $(du -h libopenblas.dll | cut -f1)"
# else
#     # 复制依赖的DLL
#     if [ -f "$OPENBLAS_PATH/bin/libopenblas.dll" ]; then
#         cp "$OPENBLAS_PATH/bin/libopenblas.dll" .
#         echo "已复制libopenblas.dll"
#     fi
# fi

# 静态链接构建
echo "构建静态链接版本..."
# 构建静态版本时无须在本构建脚本中设置复杂参数，源码中经已指定了静态链接参数:

# /*
# #cgo windows LDFLAGS: -L../OpenBLAS-0.3.30-x64/lib -l:libopenblas.a -static -lpthread
# #cgo windows CFLAGS: -I../OpenBLAS-0.3.30-x64/include
# #include <cblas.h>
# */
# import "C"

# 构建静态版本的关键在于使用printOpenBLASConfig()导入了C接口的方法，因为代码中如果无引入c相关代码的话是不会被gcc静态编译
# 静态链接时，需要在go build命令中添加 -ldflags "-w -s" 参数，以减少二进制文件大小
# go build -o iTransformer-static.exe -ldflags "-w -s"
go build -o iTransformer-static.exe
echo "静态链接版本大小: $(du -h iTransformer-static.exe | cut -f1)"

echo "构建完成"
# echo "运行动态链接版本: ./iTransformer-dynamic.exe"
echo "运行静态链接版本: ./iTransformer-static.exe"

# $ ./iTransformer-static.exe
# OpenBLAS 配置信息:
# OpenBLAS 0.3.30 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS=64
# 使用的核心架构: Haswell
# 预热OpenBLAS线程池...
# 预热耗时: 52.4873ms
# 运行 1: 16.824ms
# 运行 2: 17.0303ms
# 运行 3: 15.8196ms
# 运行 4: 16.5172ms
# 运行 5: 15.8199ms
# 平均矩阵乘法耗时: 16.4022ms (5次运行)
